home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 130_01 / diskio.c < prev    next >
Text File  |  1985-03-09  |  2KB  |  73 lines

  1. /*
  2.    Disk I/O utilities
  3. */
  4.  
  5. #include <diskio.dcl>
  6.  
  7.  
  8. diskio(rdwt,dadrptr,bufadr,nblks,maxtrk,maxsec)
  9. struct dskadr *dadrptr;
  10. char *bufadr, rdwt;
  11. int nblks;
  12. char maxtrk, maxsec;
  13. {
  14.   int i;
  15.  
  16.   if (nblks == 0) return;
  17.   if ((dadrptr->track > maxtrk) ||
  18.    (dadrptr->sector == 0 || dadrptr->sector > maxsec))
  19.    {
  20.     printf("\nAttempt to read/write track %u, sector %u\n",
  21.            dadrptr->track, dadrptr->sector);
  22.     return;
  23.    }
  24.   for (i=0; i<nblks; ++i)
  25.    {
  26. /**    printf("read/write(%u) trk %u sec %u into %x\n", rdwt,
  27.        trk, dadrptr->sector, bufadr); /*debug*/
  28. **/
  29.     if (dadrptr->track > maxtrk) break;
  30.  
  31.     bios(SETTRK,dadrptr->track);
  32.     bios(SETSEC,dadrptr->sector);
  33.     inc_dskadr(dadrptr,maxsec);
  34.     bios(SETDMA,bufadr);
  35.     bios(rdwt,2);
  36.     bufadr += 128;
  37.    }
  38. }
  39.  
  40. inc_dskadr(dadrptr,maxsec)
  41. struct dskadr *dadrptr;
  42. char maxsec;
  43. {
  44.     if (++dadrptr->sector > maxsec)
  45.      {
  46.       dadrptr->sector = 1;
  47.       ++dadrptr->track;
  48.      }
  49. }
  50.  
  51. dec_dskadr(dadrptr,maxsec)
  52. struct dskadr *dadrptr;
  53. char maxsec;
  54. {
  55.     if (--dadrptr->sector == 0)
  56.      {
  57.       dadrptr->sector = maxsec;
  58.       if (--dadrptr->track == 0) dadrptr->track = 0xff;
  59.      }
  60. }
  61.  
  62. /*bios(fnum,bcreg,dereg)
  63. int fnum, bcreg, dereg;
  64. {
  65.   /* call the bios entry point associated with fnum */
  66.  
  67.   int *bbase;
  68.  
  69.   call( *(bbase = 0x0001) + (fnum * 3),
  70.         0,  0,  bcreg,  dereg);
  71. }
  72. */
  73.